package com.fary.core.type;

public interface ClassMetadata {

	/**
	 * 名称
	 */
	String getClassName();

	/**
	 * 判断是否是接口
	 */
	boolean isInterface();

	/**
	 * 判断是否是注解
	 */
	boolean isAnnotation();

	/**
	 * 判断是否是抽象类
	 */
	boolean isAbstract();

	/**
	 * 判断是否是具体类
	 */
	boolean isConcrete();

	boolean isFinal();

	/**
	 * 判断是否"独立"，TopLevelClass 或者 NestedClass 一般都是顶层类或者静态内部类
	 */
	boolean isIndependent();

	/**
	 * 是否含有 InnerClass | NestedClass | LocalClass
	 */
	boolean hasEnclosingClass();

	String getEnclosingClassName();

	boolean hasSuperClass();

	String getSuperClassName();

	String[] getInterfaceNames();

	/**
	 * 返回所有（继承、实现）该类的 成员类（内部类、接口除外）
	 */
	String[] getMemberClassNames();

}